package fun

import "fmt"

//延迟执行，在声明时不会立即执行，而是在 “函数return后” 按照 "后进先出" 的原则依次执行每一个defer。
//这样带来的好处是，能确保我们定义的函数能百分之百能够被执行到，这样就能做很多我们想做的事，
//如释放资源，清理数据，记录日志等
//
func deferFunc() int {
	index := 0

	fc := func() {

		fmt.Println(index, "匿名函数1") //2.0
		index++

		defer func() {
			fmt.Println(index, "匿名函数1-1") //2.1
			index++
		}()
	}

	defer func() {
		fmt.Println(index, "匿名函数2") //3.0
		index++
	}() //3

	defer fc() //2

	return func() int {
		fmt.Println(index, "匿名函数3")
		index++
		return index
	}()  //1
}
